	package br.ufpe.cin.rgms.linhapesquisa.modelo;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.Basic;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;

import br.ufpe.cin.rgms.base.AbstractBusinessEntity;
import br.ufpe.cin.rgms.membro.modelo.Membro;
import br.ufpe.cin.rgms.publicacao.modelo.Publicacao;

@Entity
@Table(uniqueConstraints = { @UniqueConstraint(columnNames = { "titulo" }) })
public class LinhaPesquisa extends AbstractBusinessEntity {

	private String titulo;
	private String descricaoBasica;
	private String descricaoDetalhada;
	private String financiadores;
	private String linksRelacionados;
	private List<Membro> membros;
	private List<Publicacao> publicacoes;

	public LinhaPesquisa(){
//		this.membros = new ArrayList<Membro>();
		super();
	}
	
	public LinhaPesquisa(String titulo, String descricaoBasica,
			String descricaoDetalhada, String financiadores,
			String linksRelacionados, List<Membro> membros,
			List<Publicacao> publicacoes) {
		super();
		this.titulo = titulo;
		this.descricaoBasica = descricaoBasica;
		this.descricaoDetalhada = descricaoDetalhada;
		this.financiadores = financiadores;
		this.linksRelacionados = linksRelacionados;
		this.membros = membros;
		this.publicacoes = publicacoes;
	}

	@ManyToMany
	@JoinTable(
			name="Membro_LinhaPesquisa",
	        joinColumns=@JoinColumn(name="linhapesquisa_id"),
	        inverseJoinColumns=@JoinColumn(name="membro_id")
	)
	public List<Membro> getMembros() {
		return membros;
	}

	public void setMembros(List<Membro> membros) {
		this.membros = membros;
	}

	
	@ManyToMany
	@JoinTable(
			name="Publicacao_LinhaPesquisa",
			joinColumns=@JoinColumn(name="linhapesquisa_id"),
			inverseJoinColumns=@JoinColumn(name="publicacao_id")
	)
	public List<Publicacao> getPublicacoes() {
		return publicacoes;
	}

	public void setPublicacoes(List<Publicacao> publicacoes) {
		this.publicacoes = publicacoes;
	}

	@Basic
	public String getTitulo() {
		return titulo;
	}

	public void setTitulo(String titulo) {
		this.titulo = titulo;
	}

	@Basic
	public String getDescricaoBasica() {
		return descricaoBasica;
	}

	public void setDescricaoBasica(String descricaoBasica) {
		this.descricaoBasica = descricaoBasica;
	}

	@Basic
	public String getDescricaoDetalhada() {
		return descricaoDetalhada;
	}

	public void setDescricaoDetalhada(String descricaoDetalhada) {
		this.descricaoDetalhada = descricaoDetalhada;
	}

	@Basic
	public String getFinanciadores() {
		return financiadores;
	}

	public void setFinanciadores(String financiadores) {
		this.financiadores = financiadores;
	}

	@Basic
	public String getLinksRelacionados() {
		return linksRelacionados;
	}

	public void setLinksRelacionados(String linksRelacionados) {
		this.linksRelacionados = linksRelacionados;
	}

	// TODO
	public boolean hasDadosIncompletos() throws Exception {
		throw new Exception();
	}

}
